package leetcode;

import java.util.HashMap;
import java.util.Scanner;

public class code76 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String t = scanner.nextLine();
        System.out.println(minWindow(s, t));
    }

    public static String minWindow(String s, String t) {
        // 创建哈希表存储目标字符串 t 中每个字符的出现次数
        HashMap<Character, Integer> map = new HashMap<>();
        for (char c : t.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        // 双指针的左边界，窗口中满足要求的字符数量，最小窗口长度，结果字符串
        int left = 0;
        int count = 0;
        int minLen = Integer.MAX_VALUE;
        StringBuilder res = new StringBuilder();

        // 滑动窗口的右指针
        for (int right = 0; right < s.length(); right++) {
            char rightChar = s.charAt(right);

            // 如果当前字符在哈希表中，则更新其计数
            if (map.containsKey(rightChar)) {
                map.put(rightChar, map.get(rightChar) - 1);
                // 如果该字符的计数变为 0，表示一个字符已经完全匹配
                if (map.get(rightChar) == 0) count++;
            }

            // 当窗口内包含所有需要的字符，并且数量都满足要求时
            while (count == map.size()) {
                // 截取当前窗口字符串并尝试更新最小结果
                String substring = s.substring(left, right + 1);
                if (substring.length() < minLen) {
                    minLen = substring.length();
                    res = new StringBuilder(substring);
                }

                // 移动左指针尝试缩小窗口
                char leftChar = s.charAt(left);
                if (map.containsKey(leftChar)) {
                    map.put(leftChar, map.get(leftChar) + 1);
                    // 如果某个字符的数量超过需求，减少满足条件的字符计数
                    if (map.get(leftChar) > 0) count--;
                }
                left++; // 左指针右移
            }
        }

        return res.toString(); // 返回最终的最小窗口字符串
    }


}
